package com.tbit.uqbike.webmanager.business.vehicle_operation_report.dao.stat;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.tbit.config.datasource.DataSource;
import com.tbit.uqbike.object.pojo.statistics.LowBatteryHour;
import com.tbit.manager.api.dto.MachineStatReturnDTO;
import com.tbit.uqbike.webmanager.business.vehicle_operation_report.object.LowBatteryStat;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author HZW
 * @ClassName lowBatteryHourDao
 * @Description
 * @date 2022/3/8 18:57
 * @Version 1.0
 */
@DS(DataSource.STAT)
public interface LowBatteryHourDao {
    /**
     * 获取区域和时间内的报表数据日统计
     */
    LowBatteryHour getMachineTotal(Map<String, Object> map);

    /**
     * 获取最近一次的预统计数据
     */
    LowBatteryHour getRecentlyData(Map<String, Object> map);

    /**
     * 批量新增数据
     */
    void insertBatchData(@Param("dataList") List<Map<String, Object>> dataList);

    /**
     * 新增数据
     */
    void insertData(@Param("dataList") Map<String, Object> dataList);

    /**
     * 修改数据
     */
    void updateData(LowBatteryHour lowBatteryHour);

    /**
     * 查询低电车辆占比数据
     */
    List<LowBatteryStat> selectByDataDate(@Param("adAccountIds") List<Integer> adAccountIds, @Param("lowBatteryHourTimeList") List<Date> lowBatteryHourTimeList);

    /**
     * 低电车辆的平均值，日期字段格式：2025-05-15
     */
    List<LowBatteryStat> selectDayAvgByDate(@Param("adAccountIds") List<Integer> adAccountIds, @Param("startTime") Date startTime,
                                                        @Param("endTime") Date endTime);

    /**
     * 获取时间段内的低电分时数据
     */
    List<MachineStatReturnDTO> queryByDate(@Param("accountId") Integer accountId, @Param("startTime") Date startTime,
                                        @Param("endTime") Date endTime);

    /**
     * 低电车辆的平均值，日期字段格式：5月15日
     */
    List<LowBatteryStat> queryDayAvgByDate(@Param("adAccountIds") List<Integer> adAccountIds, @Param("startTime") Date startTime,
                                            @Param("endTime") Date endTime);
}
